{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "10e1befa",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import gym\n",
    "import random\n",
    "from time import sleep\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from tqdm.notebook import tqdm"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "864ee88f",
   "metadata": {},
   "source": [
    "# Q-Learning для игры Taxi-v3\n",
    "\n",
    "В данной игре необходимо довезти пассажира до указанной точки с помощью такси. Так как пространство игры очень маленькое, то данную задачу можно решить с помощью Q-Learning\n",
    "\n",
    "## 1 Создание игровой среды \n",
    "### 1.1 Правила игры\n",
    "\n",
    "Что известно об игре:\n",
    "\n",
    "- размер поля 5x5\n",
    "- такси появляется в случайном месте\n",
    "- пассажир появляется случайно в одной из четырех локаций: (R, B, G, Y) и хочет отправиться в одну из этих случайных локаций\n",
    "\n",
    "Система вознаграждений:\n",
    "- для каждого шага: -1\n",
    "- при успешной доставке пассажира в назначенное место: +20\n",
    "- при неверной высадке пассажира: -10"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "89e9afc6",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "+---------+\n",
      "|\u001b[35mR\u001b[0m: | : :G|\n",
      "| : | : : |\n",
      "| : : : : |\n",
      "| | : |\u001b[43m \u001b[0m: |\n",
      "|\u001b[34;1mY\u001b[0m| : |B: |\n",
      "+---------+\n",
      "\n"
     ]
    }
   ],
   "source": [
    "env = gym.make(\"Taxi-v3\")\n",
    "_ = env.reset()\n",
    "env.render()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "393f8b58",
   "metadata": {},
   "source": [
    "Для построение Q-Table нам необходимо знать количество состояний в игре и количество действий"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "01903876",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Количество возможных состояний: 500\n",
      "Количество возможных действий: 6\n"
     ]
    }
   ],
   "source": [
    "state_space = env.observation_space.n\n",
    "print(\"Количество возможных состояний:\", state_space)\n",
    "action_space = env.action_space.n\n",
    "print(\"Количество возможных действий:\", action_space,)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4a0ff360",
   "metadata": {},
   "source": [
    "В нашем случае Q-Table будет иметь размер 500 x 6"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a1144e43",
   "metadata": {},
   "source": [
    "## 1.1 Создание вспомогательных классов"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "255c350e",
   "metadata": {},
   "outputs": [],
   "source": [
    "class TaxiGame:\n",
    "    \"\"\" Класс игровой среды\n",
    "    \n",
    "    С помощью класса можно делать шаг в игре и получать\n",
    "    обратную связь из игровой среды\n",
    "    \"\"\"\n",
    "    \n",
    "    def __init__(self):\n",
    "        self._env = gym.make(\"Taxi-v3\")\n",
    "        self._state = self._env.reset()\n",
    "              \n",
    "    @property\n",
    "    def state_space_size(self):\n",
    "        \"\"\"Возвращает количество состояний в игре\"\"\"\n",
    "        return self._env.observation_space.n\n",
    "    \n",
    "    @property\n",
    "    def action_space_size(self):\n",
    "        \"\"\"Возвращает количество действий в игре\"\"\"\n",
    "        return self._env.action_space.n\n",
    "    \n",
    "    @property\n",
    "    def current_state(self):\n",
    "        \"\"\"Возвращает номер текущего состояния в игре\"\"\"\n",
    "        return self._state\n",
    "    \n",
    "    def action_space_sample(self):\n",
    "        \"\"\"Возвращает номер случайного действия в игре\"\"\"\n",
    "        return self._env.action_space.sample()\n",
    "    \n",
    "    def reset(self):\n",
    "        \"\"\"Сброс игры\"\"\"\n",
    "        self._state = self._env.reset()\n",
    "        \n",
    "    def render(self):\n",
    "        \"\"\"Отрисовка состояния игры\"\"\"\n",
    "        self._env.render()\n",
    "        \n",
    "    def play_step(self, action: int) -> tuple:\n",
    "        \"\"\"Сделать игровой шаг\n",
    "        \n",
    "        Параметры\n",
    "        ---------\n",
    "        action : int\n",
    "          Номер действия\n",
    "          \n",
    "        Результат\n",
    "        ---------\n",
    "        state, reward, done : (int, int, bool)\n",
    "          state - состояние после выполнения шага\n",
    "          reward - награда за выполнение шага\n",
    "          done - если True, игра закончена\n",
    "        \"\"\"\n",
    "        \n",
    "        \n",
    "        state, reward, done, info = self._env.step(action)\n",
    "        self._state = state\n",
    "        \n",
    "        return state, reward, done"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "1cd99947",
   "metadata": {},
   "outputs": [],
   "source": [
    "class QModel:\n",
    "    \"\"\" Класс модели\n",
    "    Инициализирует Q-Table\n",
    "    \n",
    "    Параметры\n",
    "    ---------\n",
    "    state_space_size : int\n",
    "      Количество состояний в игре\n",
    "    action_space_size : int\n",
    "      Количество действий в игре\n",
    "    \"\"\"\n",
    "    def __init__(self, state_space_size: int, action_space_size: int):\n",
    "        \n",
    "        self._state_space_size = state_space_size\n",
    "        self._action_space_size = action_space_size\n",
    "        \n",
    "        self.q_table = np.zeros((self._state_space_size, self._action_space_size))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "ae9c2de7",
   "metadata": {},
   "outputs": [],
   "source": [
    "class QTrainer:\n",
    "    \"\"\"Тренер для Q-модели\n",
    "    \n",
    "    Параметры\n",
    "    ---------\n",
    "    model : QModel\n",
    "      Экземпляр класса модели\n",
    "    lr : float\n",
    "      Скорость обучения. По умолчанию 0.01.\n",
    "    gamma : float\n",
    "      Коэффициент дисконтирования. По умолчанию 0.99\n",
    "    \"\"\"\n",
    "    def __init__(self, model:QModel, lr: int=0.01, gamma: float=0.99):\n",
    "        \n",
    "        self._model = model\n",
    "        self._lr = lr\n",
    "        self._gamma = gamma\n",
    "        \n",
    "    def train_step(self, state: int, action: int, reward: int, new_state: int) -> None:\n",
    "        \"\"\" Шаг обновления Q-table\n",
    "        \n",
    "        Параметры\n",
    "        ---------\n",
    "        state : int\n",
    "          Состояние до выполнения шага\n",
    "        action : int\n",
    "          Предпринятое действие\n",
    "        reward : int\n",
    "          Награда за предпринятое действие\n",
    "        new_state : int\n",
    "          Состояние после выполнения шага\n",
    "        \"\"\"\n",
    "        \n",
    "        # Формула расчета Q(s,a):= Q(s,a) + lr [R(s,a) + gamma * max Q(s',a') - Q(s,a)]\n",
    "        self._model.q_table[state, action] += self._lr * (reward + self._gamma * \n",
    "                                                          np.max(self._model.q_table[new_state]) \n",
    "                                                          - self._model.q_table[state, action])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "5f3b6748",
   "metadata": {},
   "outputs": [],
   "source": [
    "class Agent:\n",
    "    \"\"\"\n",
    "    Класс агента\n",
    "    \n",
    "    Параметры\n",
    "    ---------\n",
    "    lr : float\n",
    "      Скорость обучения. По умолчанию 0.01.\n",
    "    gamma : float\n",
    "     Коэффициент дисконтирования. По умолчанию 0.99\n",
    "    epsilon : float\n",
    "      Параметр для политики выбора действий e-greedy. По умолчанию 1.0\n",
    "      Здесь задается стартовое значение. С каждым эпизодом \n",
    "      значение уменьшается по следующей формуле:\n",
    "      \n",
    "      min_epsilon + (max_epsilon - min_epsilon) * e^(-decay_rate * episode_number)\n",
    "      \n",
    "      где episode_number - номер эпизода игры.\n",
    "      \n",
    "    max_epsilon : float\n",
    "      Максимальное значение, которое может принимать epsilon. По умолчанию 1.0\n",
    "    min_epsilon : float\n",
    "      Минимальное значение epsilon. По умолчанию 0.001.\n",
    "    decay_rate : float\n",
    "      Коэффициент понижения значения epsilon. По умолчанию 0.01\n",
    "    \"\"\"\n",
    "    \n",
    "    def __init__(self, lr=0.01, gamma=0.99, epsilon=1.0, max_epsilon=1.0, min_epsilon=0.001,\n",
    "                decay_rate=0.01):\n",
    "        \n",
    "        self._lr = lr\n",
    "        self._gamma = gamma\n",
    "        self._epsilon = epsilon\n",
    "        self._max_epsilon = max_epsilon\n",
    "        self._min_epsilon = min_epsilon\n",
    "        self._decay_rate = decay_rate\n",
    "        \n",
    "        self.init()\n",
    "        \n",
    "    def init(self):\n",
    "        \n",
    "        self.game = TaxiGame()\n",
    "        self.game.reset()\n",
    "        \n",
    "        self._model = QModel(state_space_size=self.game.state_space_size, \n",
    "                             action_space_size=self.game.action_space_size)\n",
    "        self._trainer = QTrainer(model=self._model, lr=self._lr, gamma=self._gamma)\n",
    "        \n",
    "        self._n_episodes = 0\n",
    "        \n",
    "    def get_state(self):\n",
    "        return self.game.current_state\n",
    "        \n",
    "    @property\n",
    "    def n_episodes(self):\n",
    "        return self._n_episodes\n",
    "    \n",
    "    @n_episodes.setter\n",
    "    def n_episodes(self, n):\n",
    "        self._n_episodes = n\n",
    "        \n",
    "    def get_action(self, state):\n",
    "        \"\"\" Выбор действия с помощью политики epsilon-greedy.\n",
    "        С вероятностью 1 - epsilon выбираем эксплуатацию опыта (наилучшее действие),\n",
    "        с вероятностью epsilon выбираем режим исследования (случайный выбор действия).\n",
    "        С увеличением кол-ва игр размер epsilon уменьшается.\n",
    "        \n",
    "        Параметры\n",
    "        ---------\n",
    "        state : int\n",
    "          Номер текущего состояния\n",
    "        \"\"\"\n",
    "        \n",
    "        assert state is not None\n",
    "        \n",
    "        current_epsilon = self._min_epsilon + (self._max_epsilon - self._min_epsilon)*np.exp(-self._decay_rate*self._n_episodes)\n",
    "        \n",
    "        # Условие эксплуатации\n",
    "        if(random.uniform(0,1) > current_epsilon):\n",
    "            action = np.argmax(self._model.q_table[state])\n",
    "        # иначе --> исследование\n",
    "        else:\n",
    "            action = self.game.action_space_sample()\n",
    "            \n",
    "        return action\n",
    "    \n",
    "    def train_q_table(self, state, action, reward, new_state):\n",
    "        \"\"\" Обучаем Q-table на одном временном шаге\n",
    "        \n",
    "        Параметры\n",
    "        ---------\n",
    "        state : int\n",
    "          Состояние до выполнения шага\n",
    "        action : int\n",
    "          Предпринятое действие\n",
    "        reward : int\n",
    "          Награда за предпринятое действие\n",
    "        new_state : int\n",
    "          Состояние после выполнения шага\n",
    "        \"\"\"\n",
    "        self._trainer.train_step(state=state, action=action, reward=reward, new_state=new_state)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7884c899",
   "metadata": {},
   "source": [
    "### 1.3 Анализ скорости уменьшения epsilon в зависимости от гиперпараметра decay_rate\n",
    "\n",
    "В классе Agent есть параметр decay_rate, который влияет на скорость снижения коэффициента epsilon в политике выбора действия eps-greedy.\n",
    "\n",
    "Проверим скорость уменьшения epsilon в зависимости от разных значений decay_rate. epsilon рассчитывается по следующей формуле:\n",
    "\n",
    "$$ \\epsilon = max\\_epsilon + (max\\_epsilon - min\\_epsilon) * e^{(-decay\\_rate * episode\\_number)}$$\n",
    "\n",
    "Чем больше epsilon, тем больше вероятность исследования окружающей среды со стороны агента."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "a29fd0b5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1008x504 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "min_epsilon = 0.03\n",
    "max_epsilon = 1.0\n",
    "decay_rate = 0.03\n",
    "num_episodes = 25000\n",
    "episode_number = np.arange(0, num_episodes)\n",
    "\n",
    "plt.figure(figsize=(14, 7))\n",
    "for decay_rate in (0.01, 0.05, 0.003, 0.001, 0.0005, 0.0003, 0.0002):\n",
    "    epsilons = min_epsilon + (max_epsilon - min_epsilon) * np.exp(-decay_rate*episode_number)\n",
    "    plt.plot(episode_number, epsilons, label=f\"decay_rate={decay_rate}\")\n",
    "\n",
    "plt.title(\"Скорость уменьшения epsilon политики eps-greedy в зависимости от параметра decay_rate\")\n",
    "plt.xlabel(\"Номер эпизода\")\n",
    "plt.ylabel(\"epsilon\")\n",
    "plt.grid()\n",
    "plt.xticks(np.linspace(0, num_episodes, 20))\n",
    "plt.yticks(np.linspace(0, 1, 10))\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "026e8356",
   "metadata": {},
   "source": [
    "Из графика видно, что при уменьшении размера decay_rate, скорость уменьшения epsilon ниже. Мы будем обучать агента на 25000 эпизодах, в нашем случае можно пробовать брать decay_rate до 0.003 или ниже. \n",
    "\n",
    "## 2 Обучение агента\n",
    "\n",
    "### 2.1 Создание вспомогательных функций"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "b765f3eb",
   "metadata": {},
   "outputs": [],
   "source": [
    "def train_loop(agent: Agent, total_episodes=25000, max_steps=250) -> tuple:\n",
    "    \"\"\" Обучение агента\n",
    "    \n",
    "    Параметры\n",
    "    ---------\n",
    "    agent : Agent\n",
    "      Экземпляр класса Agent\n",
    "    total_episodes : int\n",
    "      Количество эпизодов для обучения\n",
    "    max_steps : int\n",
    "      Максимальное число шагов в игре\n",
    "    \"\"\"\n",
    "    \n",
    "    # Инциализируем агента\n",
    "    agent.init()\n",
    "    \n",
    "    # Делаем шаги по эпизодам\n",
    "    for episode_idx in tqdm(range(total_episodes)):\n",
    "        \n",
    "        # Для каждого эпизода сбрасываем игру\n",
    "        agent.game.reset()\n",
    "        # Устанавливаем номер эпизода у агента, требуется для расчета epsilon\n",
    "        agent.n_episodes = episode_idx\n",
    "        \n",
    "        # Делаем шаги в эпизоде\n",
    "        for step_idx in range(max_steps):\n",
    "            \n",
    "            # Получаем текущее состояние\n",
    "            state = agent.get_state()\n",
    "            \n",
    "            # С помощью политики получаем действие для текущего состояния\n",
    "            action = agent.get_action(state)\n",
    "            \n",
    "            # Выполняем действие в среде и получаем от нее обратную связь\n",
    "            new_state, reward, done = agent.game.play_step(action)\n",
    "            \n",
    "            # Тренируем Q-table\n",
    "            agent.train_q_table(state=state, action=action, reward=reward, new_state=new_state)\n",
    "\n",
    "            # Если эпизод закончен, то прерываем шаги по нему и переходим к следующему\n",
    "            if done:\n",
    "                break"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "1df8683a",
   "metadata": {},
   "outputs": [],
   "source": [
    "def play_game(agent, total_episodes=1, max_steps=250, render=True) -> tuple:\n",
    "    \"\"\" Играем агентов в игру\n",
    "    \n",
    "    Параметры\n",
    "    ---------\n",
    "    agent : Agent\n",
    "      Обученный экземпляр класса Agent\n",
    "    total_episodes : int\n",
    "      Количество эпизодов для обучения\n",
    "    max_steps : int\n",
    "      Максимальное число шагов в игре\n",
    "    render : bool\n",
    "      Если True, то будет отрисован каждый шаг в игре\n",
    "    \n",
    "    Результат\n",
    "    ---------\n",
    "    rewards, steps : (list, list)\n",
    "      rewards - список наград для каждого эпизода\n",
    "      steps - список количества шагов для каждого эпизода\n",
    "    \"\"\"\n",
    "    \n",
    "    rewards = []\n",
    "    steps = []\n",
    "    \n",
    "    for episode_idx in range(total_episodes):\n",
    "        \n",
    "        # Для каждого эпизода сбрасываем игру\n",
    "        agent.game.reset()\n",
    "        \n",
    "        # Сумма нагрды в эпизоде\n",
    "        total_rewards = 0\n",
    "        # Сумма шагов в эпизоде\n",
    "        total_steps = 0\n",
    "        \n",
    "        if render:\n",
    "            print(f\"Эпизод {episode_idx}\")\n",
    "\n",
    "        # Делаем шаги в эпизоде\n",
    "        for step_idx in range(max_steps):\n",
    "            \n",
    "            if render:\n",
    "                agent.game.render()\n",
    "            \n",
    "            # Получаем текущее состояние\n",
    "            state = agent.get_state()\n",
    "            \n",
    "            # С помощью политики получаем действие для текущего состояния\n",
    "            action = agent.get_action(state)\n",
    "            \n",
    "            # Выполняем действие в среде и получаем от нее обратную связь\n",
    "            new_state, reward, done = agent.game.play_step(action)\n",
    "            \n",
    "            total_rewards += reward\n",
    "            total_steps += 1\n",
    "\n",
    "            if done:\n",
    "                break\n",
    "            \n",
    "        rewards.append(total_rewards)\n",
    "        steps.append(total_steps)\n",
    "        \n",
    "    return np.array(rewards), np.array(steps)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9f0d2526",
   "metadata": {},
   "source": [
    "### 2.2 Обучение агента"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "87c931bb",
   "metadata": {},
   "outputs": [],
   "source": [
    "config = {\n",
    "    'agent': {\n",
    "        'lr': 0.01, \n",
    "        'gamma': 0.99, \n",
    "        'epsilon': 1.0, \n",
    "        'max_epsilon': 1.0, \n",
    "        'min_epsilon': 0.001,\n",
    "        'decay_rate': 0.003,\n",
    "    },\n",
    "    'train_loop': {\n",
    "        'total_episodes': 25000,\n",
    "        'max_steps': 250\n",
    "    } \n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "5b8086af",
   "metadata": {},
   "outputs": [],
   "source": [
    "agent = Agent(**config['agent'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "dcd87a24",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "59d1f7fd928642dab472dd78f8f14910",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/25000 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "train_loop(agent, **config['train_loop'])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "80653eca",
   "metadata": {},
   "source": [
    "### 2.3 Проверка результатов обучения агента\n",
    "#### 2.3.1 Визуализация одного эпизода игры"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "ba82498d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Эпизод 0\n",
      "+---------+\n",
      "|R: | : :G|\n",
      "| : | :\u001b[43m \u001b[0m: |\n",
      "| : : : : |\n",
      "| | : | : |\n",
      "|\u001b[35mY\u001b[0m| : |\u001b[34;1mB\u001b[0m: |\n",
      "+---------+\n",
      "\n",
      "+---------+\n",
      "|R: | : :G|\n",
      "| : | : : |\n",
      "| : : :\u001b[43m \u001b[0m: |\n",
      "| | : | : |\n",
      "|\u001b[35mY\u001b[0m| : |\u001b[34;1mB\u001b[0m: |\n",
      "+---------+\n",
      "  (South)\n",
      "+---------+\n",
      "|R: | : :G|\n",
      "| : | : : |\n",
      "| : : : : |\n",
      "| | : |\u001b[43m \u001b[0m: |\n",
      "|\u001b[35mY\u001b[0m| : |\u001b[34;1mB\u001b[0m: |\n",
      "+---------+\n",
      "  (South)\n",
      "+---------+\n",
      "|R: | : :G|\n",
      "| : | : : |\n",
      "| : : : : |\n",
      "| | : | : |\n",
      "|\u001b[35mY\u001b[0m| : |\u001b[34;1m\u001b[43mB\u001b[0m\u001b[0m: |\n",
      "+---------+\n",
      "  (South)\n",
      "+---------+\n",
      "|R: | : :G|\n",
      "| : | : : |\n",
      "| : : : : |\n",
      "| | : | : |\n",
      "|\u001b[35mY\u001b[0m| : |\u001b[42mB\u001b[0m: |\n",
      "+---------+\n",
      "  (Pickup)\n",
      "+---------+\n",
      "|R: | : :G|\n",
      "| : | : : |\n",
      "| : : : : |\n",
      "| | : |\u001b[42m_\u001b[0m: |\n",
      "|\u001b[35mY\u001b[0m| : |B: |\n",
      "+---------+\n",
      "  (North)\n",
      "+---------+\n",
      "|R: | : :G|\n",
      "| : | : : |\n",
      "| : : :\u001b[42m_\u001b[0m: |\n",
      "| | : | : |\n",
      "|\u001b[35mY\u001b[0m| : |B: |\n",
      "+---------+\n",
      "  (North)\n",
      "+---------+\n",
      "|R: | : :G|\n",
      "| : | : : |\n",
      "| : :\u001b[42m_\u001b[0m: : |\n",
      "| | : | : |\n",
      "|\u001b[35mY\u001b[0m| : |B: |\n",
      "+---------+\n",
      "  (West)\n",
      "+---------+\n",
      "|R: | : :G|\n",
      "| : | : : |\n",
      "| :\u001b[42m_\u001b[0m: : : |\n",
      "| | : | : |\n",
      "|\u001b[35mY\u001b[0m| : |B: |\n",
      "+---------+\n",
      "  (West)\n",
      "+---------+\n",
      "|R: | : :G|\n",
      "| : | : : |\n",
      "|\u001b[42m_\u001b[0m: : : : |\n",
      "| | : | : |\n",
      "|\u001b[35mY\u001b[0m| : |B: |\n",
      "+---------+\n",
      "  (West)\n",
      "+---------+\n",
      "|R: | : :G|\n",
      "| : | : : |\n",
      "| : : : : |\n",
      "|\u001b[42m_\u001b[0m| : | : |\n",
      "|\u001b[35mY\u001b[0m| : |B: |\n",
      "+---------+\n",
      "  (South)\n",
      "+---------+\n",
      "|R: | : :G|\n",
      "| : | : : |\n",
      "| : : : : |\n",
      "| | : | : |\n",
      "|\u001b[35m\u001b[42mY\u001b[0m\u001b[0m| : |B: |\n",
      "+---------+\n",
      "  (South)\n"
     ]
    }
   ],
   "source": [
    "rewards, steps = play_game(agent, total_episodes=1, max_steps=250, render=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "28683f8d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Награда в эпизоде: 9\n",
      "Число шагов в эпизоде: 12\n"
     ]
    }
   ],
   "source": [
    "print(\"Награда в эпизоде:\", rewards[0])\n",
    "print(\"Число шагов в эпизоде:\", steps[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1c12c90d",
   "metadata": {},
   "source": [
    "#### 2.3.2 Сбор статистики эффективности агента в игре\n",
    "\n",
    "Соберем статистику игры агента на 5000 эпизодах"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "2a632af4",
   "metadata": {},
   "outputs": [],
   "source": [
    "rewards, steps = play_game(agent, total_episodes=5000, max_steps=250, render=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "14b27e3c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Медианная награда в эпизоде: 8.0\n",
      "Средняя награда в эпизоде: 6.4694\n",
      "Медианное число шагов в эпизоде: 13.0\n",
      "Среднее число шагов в эпизоде: 14.3638\n",
      "Количество эпизодов с отрицательной наградой: 47\n"
     ]
    }
   ],
   "source": [
    "print(\"Медианная награда в эпизоде:\", np.median(rewards))\n",
    "print(\"Средняя награда в эпизоде:\", np.mean(rewards))\n",
    "print(\"Медианное число шагов в эпизоде:\", np.median(steps))\n",
    "print(\"Среднее число шагов в эпизоде:\", np.mean(steps))\n",
    "print(\"Количество эпизодов с отрицательной наградой:\", len(np.where(rewards < 0)[0]))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a65d4d9c",
   "metadata": {},
   "source": [
    "Как видно из результатов, агент по медианному значению справляется с работой за 13 шагов. И получает примерно 8 очков награды из возможных 20. При этом количество эпизодов с отрицательной наградой составляем примерно 2% от их общего количества. В этом случае агент либо слишком долго довозит клиента до требуемого места, либо высаживает его в неверном месте. Это достаточно хороший результат.\n",
    "\n",
    "# Итоги\n",
    "\n",
    "В данной работе обучили агента играть игру Taxi-v3 с помощью техники Q-Learning. Создали необходимые классы для обучения агента, обучили его и визуализировали результаты работы обученного агента."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
